package thread;

public class Demo15 {
    private static /*volatile*/ int count=0;

    public static void main(String[] args) throws InterruptedException {
        Object locker=new Object();
        Thread t1=new Thread(()->{
            for (int i = 0; i < 5000; i++) {
                synchronized/*同步代码块 加锁->执行代码->解锁*/ (locker){//针对同一对象加锁 不同对象等于没加
                    count++;
                }
            }
            System.out.println("t1结束");
        });
        Thread t2=new Thread(()->{
            for (int i = 0; i < 5000; i++) {
                synchronized (locker){
                    count++;
               }
            }
            System.out.println("t2结束");
        });
        //count 不是10000 是由多线程并发执行引起的 （线程安全问题 不安全）
        // 反之 如果在多线程并发环境执行下 不会出现上述问题 称为 线程安全
        t1.start();
        t2.start();
        t1.join();
        t2.join();
        //线程 串行执行(一个完成在执行另一个)
        // 结果为10000
/*        t1.start();
        t1.join();
        t2.start();
        t2.join();*/
        System.out.println(count);
    }
}
